பைத்தானின் 'மின்னஞ்சல்' தொகுப்பைத் திறக்கவும். சிக்கலான MIME செய்திகளை உருவாக்கவும், தரவு பிரித்தெடுப்பிற்காக உள்வரும் மின்னஞ்சல்களை திறமையாகவும் உலகளாவிய ரீதியிலும் பிரித்தெடுக்கவும் கற்றுக்கொள்ளுங்கள்.
பைத்தானின் மின்னஞ்சல் தொகுப்பில் தேர்ச்சி பெறுதல்: MIME செய்திகளை உருவாக்குதல் மற்றும் வலுவாகப் பிரித்தெடுத்தல் கலை
மின்னஞ்சல் உலகளாவிய தகவல்தொடர்பின் ஒரு முக்கிய அங்கமாக உள்ளது, இது தனிப்பட்ட கடிதப் போக்குவரத்து, வணிகச் செயல்பாடுகள் மற்றும் தானியங்கு கணினி அறிவிப்புகளுக்கு இன்றியமையாதது. ஒவ்வொரு ரிச்-டெக்ஸ்ட் மின்னஞ்சல், ஒவ்வொரு இணைப்பு மற்றும் ஒவ்வொரு கவனமாக வடிவமைக்கப்பட்ட கையொப்பத்தின் பின்னாலும் பல்நோக்கு இணைய அஞ்சல் நீட்டிப்புகளின் (MIME) சிக்கலான தன்மை உள்ளது. டெவலப்பர்களுக்கு, குறிப்பாக பைத்தானுடன் பணிபுரிபவர்களுக்கு, இந்த MIME செய்திகளை நிரல் ரீதியாக உருவாக்குவது மற்றும் பிரித்தெடுப்பது எப்படி என்பதை அறிவது ஒரு முக்கியமான திறமையாகும்.
பைத்தானின் உள்ளமைக்கப்பட்ட email
தொகுப்பு மின்னஞ்சல் செய்திகளைக் கையாள ஒரு வலுவான மற்றும் விரிவான கட்டமைப்பை வழங்குகிறது. இது எளிய உரையை அனுப்புவதற்கு மட்டுமல்ல; இது MIME-இன் நுட்பமான விவரங்களை எளிதாக்க வடிவமைக்கப்பட்டுள்ளது, இது உங்களுக்கு அதிநவீன மின்னஞ்சல்களை உருவாக்கவும், உள்வரும் மின்னஞ்சல்களிலிருந்து குறிப்பிட்ட தரவை குறிப்பிடத்தக்க துல்லியத்துடன் பிரித்தெடுக்கவும் அனுமதிக்கிறது. இந்த வழிகாட்டி இந்த தொகுப்பின் இரண்டு முக்கிய அம்சங்களான: அனுப்புவதற்காக MIME செய்திகளை உருவாக்குதல் மற்றும் தரவு பிரித்தெடுப்பிற்காக அவற்றைப் பிரித்தல் ஆகியவற்றில் உங்களை ஆழமாக அழைத்துச் செல்லும், மேலும் சிறந்த நடைமுறைகள் குறித்த உலகளாவிய கண்ணோட்டத்தை வழங்கும்.
உருவாக்கம் மற்றும் பிரித்தெடுத்தல் இரண்டையும் புரிந்துகொள்வது முக்கியமானது. நீங்கள் ஒரு செய்தியை உருவாக்கும்போது, நீங்கள் அதன் கட்டமைப்பையும் உள்ளடக்கத்தையும் மற்றொரு கணினி புரிந்துகொள்வதற்காக வரையறுக்கிறீர்கள். நீங்கள் பிரித்தெடுக்கும்போது, மற்றொரு கணினியால் வரையறுக்கப்பட்ட ஒரு கட்டமைப்பையும் உள்ளடக்கத்தையும் நீங்கள் புரிந்துகொள்கிறீர்கள். ஒன்றைப் பற்றிய ஆழமான புரிதல் மற்றொன்றில் தேர்ச்சி பெற பெரிதும் உதவுகிறது, இது மேலும் நெகிழ்வான மற்றும் இயங்கக்கூடிய மின்னஞ்சல் பயன்பாடுகளுக்கு வழிவகுக்கிறது.
MIME-ஐப் புரிந்துகொள்ளுதல்: நவீன மின்னஞ்சலின் முதுகெலும்பு
பைத்தான் விவரங்களுக்குள் செல்வதற்கு முன், MIME என்றால் என்ன, அது ஏன் மிகவும் முக்கியமானது என்பதைப் புரிந்துகொள்வது அவசியம். முதலில், மின்னஞ்சல் செய்திகள் எளிய உரைக்கு (7-பிட் ASCII எழுத்துக்கள்) மட்டுமே கட்டுப்படுத்தப்பட்டிருந்தன. 1990-களின் முற்பகுதியில் அறிமுகப்படுத்தப்பட்ட MIME, மின்னஞ்சலின் திறன்களை பின்வருவனவற்றை ஆதரிக்கும் வகையில் விரிவுபடுத்தியது:
- ASCII அல்லாத எழுத்துக்கள்: அரபு, சீனம், ரஷ்யன் அல்லது ASCII தொகுப்பிற்கு வெளியே உள்ள எழுத்துக்களைப் பயன்படுத்தும் வேறு எந்த மொழியிலும் உரையை அனுமதிக்கிறது.
- இணைப்புகள்: ஆவணங்கள், படங்கள், ஆடியோ மற்றும் வீடியோ போன்ற கோப்புகளை அனுப்புதல்.
- ரிச் டெக்ஸ்ட் வடிவமைப்பு: தடித்த, சாய்ந்த, வண்ணங்கள் மற்றும் தளவமைப்புகளுடன் கூடிய HTML மின்னஞ்சல்கள்.
- பல பகுதிகள்: ஒரே மின்னஞ்சலில் எளிய உரை, HTML மற்றும் இணைப்புகளை இணைத்தல்.
MIME இதை ஒரு மின்னஞ்சல் செய்திக்கு குறிப்பிட்ட தலைப்புகளைச் சேர்ப்பதன் மூலமும், அதன் உடலை பல்வேறு "பகுதிகளாக" கட்டமைப்பதன் மூலமும் அடைகிறது. நீங்கள் சந்திக்கும் முக்கிய MIME தலைப்புகள் பின்வருமாறு:
Content-Type:
ஒரு பகுதியில் உள்ள தரவின் வகையைக் குறிப்பிடுகிறது (எ.கா.,text/plain
,text/html
,image/jpeg
,application/pdf
,multipart/alternative
). இது பெரும்பாலும்charset
அளவுருவையும் உள்ளடக்கியது (எ.கா.,charset=utf-8
).Content-Transfer-Encoding:
மின்னஞ்சல் கிளையன்ட் உள்ளடக்கத்தை எவ்வாறு டிகோட் செய்ய வேண்டும் என்பதைக் குறிக்கிறது (எ.கா., பைனரி தரவுகளுக்குbase64
, சில ASCII அல்லாத எழுத்துக்களுடன் கூடிய உரைக்குquoted-printable
).Content-Disposition:
பெறுநரின் மின்னஞ்சல் கிளையன்ட் அந்த பகுதியை எவ்வாறு காட்ட வேண்டும் என்று பரிந்துரைக்கிறது (எ.கா., செய்தி உடலுக்குள் காட்டinline
, சேமிக்கப்பட வேண்டிய கோப்பிற்குattachment
).
பைத்தான் email
தொகுப்பு: ஒரு ஆழமான பார்வை
பைத்தானின் email
தொகுப்பு என்பது மின்னஞ்சல் செய்திகளை நிரல் ரீதியாக உருவாக்க, பிரிக்க மற்றும் மாற்றியமைக்க வடிவமைக்கப்பட்ட ஒரு விரிவான நூலகமாகும். இது Message
பொருள்கள் என்ற கருத்தை மையமாகக் கொண்டது, இது ஒரு மின்னஞ்சலின் கட்டமைப்பைக் குறிக்கிறது.
இந்த தொகுப்பில் உள்ள முக்கிய தொகுதிகள்:
email.message:
முக்கியEmailMessage
வகுப்பைக் கொண்டுள்ளது, இது மின்னஞ்சல் செய்திகளை உருவாக்குவதற்கும் கையாளுவதற்கும் முதன்மை இடைமுகமாகும். இது MIME விவரங்களை தானாகவே கையாளும் மிகவும் நெகிழ்வான வகுப்பு.email.mime:
MIME கட்டமைப்பின் மீது மேலும் வெளிப்படையான கட்டுப்பாட்டை வழங்கும் மரபுவழி வகுப்புகளை (MIMEText
,MIMEMultipart
போன்றவை) வழங்குகிறது.EmailMessage
அதன் எளிமை காரணமாக புதிய குறியீட்டிற்கு பொதுவாக விரும்பப்பட்டாலும், இந்த வகுப்புகளைப் புரிந்துகொள்வது நன்மை பயக்கும்.email.parser:
மூல மின்னஞ்சல் தரவை (பைட்டுகள் அல்லது சரங்கள்)EmailMessage
பொருள்களாக மாற்றBytesParser
மற்றும்Parser
போன்ற வகுப்புகளை வழங்குகிறது.email.policy:
மின்னஞ்சல் செய்திகள் எவ்வாறு உருவாக்கப்படுகின்றன மற்றும் பிரிக்கப்படுகின்றன என்பதைக் கட்டுப்படுத்தும் கொள்கைகளை வரையறுக்கிறது, இது தலைப்பு குறியாக்கம், வரி முடிவுகள் மற்றும் பிழை கையாளுதல் ஆகியவற்றை பாதிக்கிறது.
பெரும்பாலான நவீன பயன்பாட்டு நிகழ்வுகளுக்கு, நீங்கள் முதன்மையாக email.message.EmailMessage
வகுப்பைக் கொண்டு உருவாக்கம் மற்றும் பிரிக்கப்பட்ட செய்தி பொருள் ஆகிய இரண்டிற்கும் தொடர்புகொள்வீர்கள். அதன் முறைகள் மரபுவழி email.mime
வகுப்புகளுடன் இருந்த ஒரு நீண்ட செயல்முறையை பெரிதும் எளிதாக்குகின்றன.
MIME செய்தி உருவாக்கம்: துல்லியத்துடன் மின்னஞ்சல்களை உருவாக்குதல்
மின்னஞ்சல்களை உருவாக்குவது என்பது பல்வேறு கூறுகளை (உரை, HTML, இணைப்புகள்) ஒரு செல்லுபடியாகும் MIME கட்டமைப்பில் ஒன்று சேர்ப்பதை உள்ளடக்கியது. EmailMessage
வகுப்பு இந்த செயல்முறையை கணிசமாக எளிதாக்குகிறது.
அடிப்படை உரை மின்னஞ்சல்கள்
மிக எளிமையான மின்னஞ்சல் எளிய உரை ஆகும். நீங்கள் ஒன்றை உருவாக்கி அடிப்படை தலைப்புகளை சிரமமின்றி அமைக்கலாம்:
from email.message import EmailMessage
msg = EmailMessage()
msg['Subject'] = 'Greetings from Python'
msg['From'] = 'sender@example.com'
msg['To'] = 'recipient@example.com'
msg.set_content('Hello, this is a plain text email sent from Python.\n\nBest regards,\nYour Python Script')
print(msg.as_string())
விளக்கம்:
EmailMessage()
ஒரு வெற்று செய்தி பொருளை உருவாக்குகிறது.- அகராதி போன்ற அணுகல் (
msg['Subject'] = ...
) பொதுவான தலைப்புகளை அமைக்கிறது. set_content()
மின்னஞ்சலின் முதன்மை உள்ளடக்கத்தைச் சேர்க்கிறது. இயல்பாக, இதுContent-Type: text/plain; charset="utf-8"
என்று ஊகிக்கிறது.as_string()
செய்தியை SMTP வழியாக அனுப்ப அல்லது ஒரு கோப்பில் சேமிக்க ஏற்ற ஒரு சரம் வடிவத்தில் வரிசைப்படுத்துகிறது.
HTML உள்ளடக்கத்தைச் சேர்த்தல்
ஒரு HTML மின்னஞ்சலை அனுப்ப, நீங்கள் set_content()
ஐ அழைக்கும்போது உள்ளடக்க வகையை குறிப்பிட்டால் போதும். HTML-ஐ ரெண்டர் செய்யாத மின்னஞ்சல் கிளையண்ட்களைக் கொண்ட பெறுநர்களுக்கு அல்லது அணுகல்தன்மை காரணங்களுக்காக ஒரு எளிய உரை மாற்றீட்டை வழங்குவது ஒரு நல்ல நடைமுறையாகும்.
from email.message import EmailMessage
msg = EmailMessage()
msg['Subject'] = 'Your HTML Newsletter'
msg['From'] = 'newsletter@example.com'
msg['To'] = 'subscriber@example.com'
html_content = """
<html>
<head></head>
<body>
<h1>Welcome to Our Global Update!</h1>
<p>Dear Subscriber,</p>
<p>This is your <strong>latest update</strong> from around the world.</p>
<p>Visit our <a href="http://www.example.com">website</a> for more.</p>
<p>Best regards,<br>The Team</p>
</body>
</html>
"""
# Add the HTML version
msg.add_alternative(html_content, subtype='html')
# Add a plain text fallback
plain_text_content = (
"Welcome to Our Global Update!\n\n"
"Dear Subscriber,\n\n"
"This is your latest update from around the world.\n"
"Visit our website for more: http://www.example.com\n\n"
"Best regards,\nThe Team"
)
msg.add_alternative(plain_text_content, subtype='plain')
print(msg.as_string())
விளக்கம்:
add_alternative()
*ஒரே* உள்ளடக்கத்தின் வெவ்வேறு பிரதிநிதித்துவங்களைச் சேர்க்கப் பயன்படுகிறது. மின்னஞ்சல் கிளையன்ட் அது கையாளக்கூடிய "சிறந்த" ஒன்றை (பொதுவாக HTML) காண்பிக்கும்.- இது தானாகவே ஒரு
multipart/alternative
MIME கட்டமைப்பை உருவாக்குகிறது.
இணைப்புகளைக் கையாளுதல்
கோப்புகளை இணைப்பது add_attachment()
ஐப் பயன்படுத்தி எளிதானது. நீங்கள் எந்த வகையான கோப்பையும் இணைக்கலாம், மேலும் இந்த தொகுப்பு பொருத்தமான MIME வகைகள் மற்றும் குறியாக்கங்களை (பொதுவாக base64
) கையாளுகிறது.
from email.message import EmailMessage
from pathlib import Path
# Create dummy files for demonstration
Path('report.pdf').write_bytes(b'%PDF-1.4\n1 0 obj<</Type/Catalog/Pages 2 0 R>>endobj\n2 0 obj<</Count 0>>endobj\nxref\n0 3\n0000000000 65535 f\n0000000009 00000 n\n0000000052 00000 n\ntrailer<</Size 3/Root 1 0 R>>startxref\n104\n%%EOF') # A very basic, invalid PDF placeholder
Path('logo.png').write_bytes(b'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x01\x00\x00\x00\x01\x08\x06\x00\x00\x00\x1f\x15\xc4\x89\x00\x00\x00\x0cIDAT\x08\x99c`\x00\x00\x00\x02\x00\x01\xe2!\x00\xa0\x00\x00\x00\x00IEND\xaeB`\x82') # A 1x1 transparent PNG placeholder
msg = EmailMessage()
msg['Subject'] = 'Important Document and Image'
msg['From'] = 'sender@example.com'
msg['To'] = 'recipient@example.com'
msg.set_content('Please find the attached report and company logo.')
# Attach a PDF file
with open('report.pdf', 'rb') as f:
file_data = f.read()
msg.add_attachment(
file_data,
maintype='application',
subtype='pdf',
filename='Annual_Report_2024.pdf'
)
# Attach an image file
with open('logo.png', 'rb') as f:
image_data = f.read()
msg.add_attachment(
image_data,
maintype='image',
subtype='png',
filename='CompanyLogo.png'
)
print(msg.as_string())
# Clean up dummy files
Path('report.pdf').unlink()
Path('logo.png').unlink()
விளக்கம்:
add_attachment()
கோப்பு உள்ளடக்கத்தின் மூல பைட்டுகளை எடுத்துக்கொள்கிறது.maintype
மற்றும்subtype
MIME வகையைக் குறிப்பிடுகின்றன (எ.கா.,application/pdf
,image/png
). பெறுநரின் மின்னஞ்சல் கிளையன்ட் இணைப்பை சரியாக அடையாளம் கண்டு கையாள இவை முக்கியமானவை.filename
பெறுநரால் இணைப்பு சேமிக்கப்படும் பெயரைக் வழங்குகிறது.- இது தானாகவே ஒரு
multipart/mixed
கட்டமைப்பை அமைக்கிறது.
மல்டிபார்ட் செய்திகளை உருவாக்குதல்
உங்களிடம் ஒரு HTML உடல், ஒரு எளிய உரை மாற்று, மற்றும் இன்லைன் படங்கள் அல்லது தொடர்புடைய கோப்புகள் கொண்ட ஒரு செய்தி இருக்கும்போது, உங்களுக்கு ஒரு சிக்கலான மல்டிபார்ட் கட்டமைப்பு தேவை. EmailMessage
வகுப்பு இதை add_related()
மற்றும் add_alternative()
உடன் புத்திசாலித்தனமாக கையாளுகிறது.
ஒரு பொதுவான காட்சி என்பது HTML-க்குள் நேரடியாக உட்பொதிக்கப்பட்ட ஒரு படத்தைக் கொண்ட HTML மின்னஞ்சல் ("இன்லைன்" படம்). இது multipart/related
-ஐப் பயன்படுத்துகிறது.
from email.message import EmailMessage
from pathlib import Path
# Create a dummy image file for demonstration (a 1x1 transparent PNG)
Path('banner.png').write_bytes(b'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x01\x00\x00\x00\x01\x08\x06\x00\x00\x00\x1f\x15\xc4\x89\x00\x00\x00\x0cIDAT\x08\x99c`\x00\x00\x00\x02\x00\x01\xe2!\x00\xa0\x00\x00\x00\x00IEND\xaeB`\x82')
msg = EmailMessage()
msg['Subject'] = 'Inline Image Example'
msg['From'] = 'sender@example.com'
msg['To'] = 'recipient@example.com'
# Plain text version (fallback)
plain_text = 'Check out our amazing banner!\n\n[Image: Banner.png]\n\nVisit our site.'
msg.set_content(plain_text, subtype='plain') # Set initial plain text content
# HTML version (with CID for inline image)
html_content = """
<html>
<head></head>
<body>
<h1>Our Latest Offer!</h1>
<p>Dear Customer,</p>
<p>Don't miss out on our special global promotion:</p>
<img src="cid:my-banner-image" alt="Promotion Banner">
<p>Click <a href="http://www.example.com">here</a> to learn more.</p>
</body>
</html>
"""
msg.add_alternative(html_content, subtype='html') # Add HTML alternative
# Add the inline image (related content)
with open('banner.png', 'rb') as img_file:
image_data = img_file.read()
msg.add_related(
image_data,
maintype='image',
subtype='png',
cid='my-banner-image' # This CID matches the 'src' in HTML
)
print(msg.as_string())
# Clean up dummy file
Path('banner.png').unlink()
விளக்கம்:
set_content()
ஆரம்ப உள்ளடக்கத்தை (இங்கே, எளிய உரை) நிறுவுகிறது.add_alternative()
HTML பதிப்பைச் சேர்க்கிறது, இது எளிய உரை மற்றும் HTML பகுதிகளைக் கொண்ட ஒருmultipart/alternative
கட்டமைப்பை உருவாக்குகிறது.add_related()
செய்திப் பகுதிகளில் ஒன்றுடன் "தொடர்புடைய" உள்ளடக்கத்திற்குப் பயன்படுத்தப்படுகிறது, பொதுவாக HTML-இல் இன்லைன் படங்கள். இது ஒருcid
(Content-ID) அளவுருவை எடுத்துக்கொள்கிறது, இது பின்னர் HTML<img src="cid:my-banner-image">
குறிச்சொல்லில் குறிப்பிடப்படுகிறது.- இறுதி கட்டமைப்பு
multipart/mixed
ஆக இருக்கும் (வெளிப்புற இணைப்புகள் இருந்தால்) இது ஒருmultipart/alternative
பகுதியைக் கொண்டிருக்கும், அது ஒருmultipart/related
பகுதியைக் கொண்டிருக்கும்.multipart/related
பகுதி HTML மற்றும் இன்லைன் படத்தைக் கொண்டுள்ளது.EmailMessage
வகுப்பு இந்த உள்ளடுக்கு சிக்கலை உங்களுக்காக கையாளுகிறது.
உலகளாவிய அணுகலுக்கான குறியாக்கம் மற்றும் எழுத்துத் தொகுப்புகள்
சர்வதேச தகவல்தொடர்புக்கு, சரியான எழுத்துக்குறியாக்கம் மிக முக்கியமானது. email
தொகுப்பு, இயல்பாக, UTF-8 ஐப் பயன்படுத்துவதில் மிகவும் உறுதியாக உள்ளது, இது உலகம் முழுவதிலுமிருந்து வரும் பல்வேறு எழுத்துத் தொகுப்புகளைக் கையாளுவதற்கான உலகளாவிய தரமாகும்.
from email.message import EmailMessage
msg = EmailMessage()
msg['Subject'] = 'Global Characters: こんにちは, Привет, नमस्ते'
msg['From'] = 'global_sender@example.com'
msg['To'] = 'global_recipient@example.com'
# Japanese, Russian, and Hindi characters
content = "This message contains diverse global characters:\n"
content += "こんにちは (Japanese)\n"
content += "Привет (Russian)\n"
content += "नमस्ते (Hindi)\n\n"
content += "The 'email' package handles UTF-8 gracefully."
msg.set_content(content)
print(msg.as_string())
விளக்கம்:
set_content()
ஒரு பைத்தான் சரத்தைப் பெறும்போது, அது தானாகவே அதை UTF-8 க்கு குறியாக்கம் செய்துContent-Type: text/plain; charset="utf-8"
தலைப்பை அமைக்கிறது.- உள்ளடக்கத்திற்கு அது தேவைப்பட்டால் (எ.கா., பல ASCII அல்லாத எழுத்துக்களைக் கொண்டிருந்தால்), பழைய மின்னஞ்சல் அமைப்புகள் வழியாக பாதுகாப்பான பரிமாற்றத்தை உறுதி செய்வதற்காக அது
Content-Transfer-Encoding: quoted-printable
அல்லதுbase64
ஐப் பயன்படுத்தலாம். தேர்ந்தெடுக்கப்பட்ட கொள்கையின்படி தொகுப்பு இதை தானாகவே கையாளுகிறது.
தனிப்பயன் தலைப்புகள் மற்றும் கொள்கைகள்
நீங்கள் ஒரு மின்னஞ்சலுக்கு எந்தவொரு தனிப்பயன் தலைப்பையும் சேர்க்கலாம். கொள்கைகள் (email.policy
இலிருந்து) செய்திகள் எவ்வாறு கையாளப்படுகின்றன என்பதை வரையறுக்கின்றன, தலைப்பு குறியாக்கம், வரி முடிவுகள் மற்றும் பிழை கையாளுதல் போன்ற அம்சங்களை பாதிக்கின்றன. இயல்புநிலை கொள்கை பொதுவாக நல்லது, ஆனால் நீங்கள் கடுமையான SMTP இணக்கத்திற்காக `SMTP` ஐத் தேர்ந்தெடுக்கலாம் அல்லது தனிப்பயன் கொள்கைகளை வரையறுக்கலாம்.
from email.message import EmailMessage
from email import policy
msg = EmailMessage(policy=policy.SMTP)
msg['Subject'] = 'Email with Custom Header'
msg['From'] = 'info@example.org'
msg['To'] = 'user@example.org'
msg['X-Custom-Header'] = 'This is a custom value for tracking'
msg['Reply-To'] = 'support@example.org'
msg.set_content('This email demonstrates custom headers and policies.')
print(msg.as_string())
விளக்கம்:
policy=policy.SMTP
ஐப் பயன்படுத்துவது SMTP தரங்களுடன் கடுமையான இணக்கத்தை உறுதி செய்கிறது, இது டெலிவரிக்கு முக்கியமானதாக இருக்கும்.- தனிப்பயன் தலைப்புகள் நிலையான தலைப்புகளைப் போலவே சேர்க்கப்படுகின்றன. அவை பெரும்பாலும் தரமற்ற தலைப்புகளைக் குறிக்க
X-
உடன் தொடங்கும்.
MIME செய்தி பிரித்தெடுத்தல்: உள்வரும் மின்னஞ்சல்களிலிருந்து தகவல்களைப் பெறுதல்
பிரித்தெடுத்தல் என்பது மூல மின்னஞ்சல் தரவை (பொதுவாக IMAP வழியாக அல்லது ஒரு கோப்பிலிருந்து பெறப்பட்டது) எடுத்து, அதை நீங்கள் எளிதாக ஆய்வு செய்து கையாளக்கூடிய ஒரு `EmailMessage` பொருளாக மாற்றுவதை உள்ளடக்கியது.
ஏற்றுதல் மற்றும் ஆரம்ப பிரித்தெடுத்தல்
நீங்கள் பொதுவாக மின்னஞ்சல்களை மூல பைட்டுகளாகப் பெறுவீர்கள். இதற்காக email.parser.BytesParser
(அல்லது வசதியான செயல்பாடுகளான email.message_from_bytes()
) பயன்படுத்தப்படுகிறது.
from email.parser import BytesParser
from email.policy import default
raw_email_bytes = b"""
From: sender@example.com
To: recipient@example.com
Subject: Test Email with Basic Headers
Date: Mon, 1 Jan 2024 10:00:00 +0000
Content-Type: text/plain; charset="utf-8"
This is the body of the email.
It's a simple test.
"""
# Using BytesParser
parser = BytesParser(policy=default)
msg = parser.parsebytes(raw_email_bytes)
# Or using the convenience function
# from email import message_from_bytes
# msg = message_from_bytes(raw_email_bytes, policy=default)
print(f"Subject: {msg['subject']}")
print(f"From: {msg['from']}")
print(f"Content-Type: {msg['Content-Type']}")
விளக்கம்:
BytesParser
மூல பைட் தரவை (மின்னஞ்சல்கள் இப்படித்தான் அனுப்பப்படுகின்றன) எடுத்து ஒருEmailMessage
பொருளைத் திருப்பித் தருகிறது.policy=default
பிரித்தெடுத்தல் விதிகளைக் குறிப்பிடுகிறது.
தலைப்புகளை அணுகுதல்
தலைப்புகள் அகராதி போன்ற விசைகள் மூலம் எளிதாக அணுகக்கூடியவை. குறியாக்கம் செய்யப்பட்ட தலைப்புகளின் டிகோடிங்கை (எ.கா., சர்வதேச எழுத்துக்களுடன் கூடிய பாடங்கள்) தொகுப்பு தானாகவே கையாளுகிறது.
# ... (using the 'msg' object from the previous parsing example)
print(f"Date: {msg['date']}")
print(f"Message ID: {msg['Message-ID'] if 'Message-ID' in msg else 'N/A'}")
# Handling multiple headers (e.g., 'Received' headers)
# from email.message import EmailMessage # If not imported yet
# from email import message_from_string # For a quick string example
multi_header_email = message_from_string(
"""
From: a@example.com
To: b@example.com
Subject: Multi-header Test
Received: from client.example.com (client.example.com [192.168.1.100])
by server.example.com (Postfix) with ESMTP id 123456789
for <b@example.com>; Mon, 1 Jan 2024 10:00:00 +0000 (GMT)
Received: from mx.another.com (mx.another.com [192.168.1.101])
by server.example.com (Postfix) with ESMTP id 987654321
for <b@example.com>; Mon, 1 Jan 2024 09:59:00 +0000 (GMT)
Body content here.
"""
)
received_headers = multi_header_email.get_all('received')
if received_headers:
print("\nReceived Headers:")
for header in received_headers:
print(f"- {header}")
விளக்கம்:
- ஒரு தலைப்பை அணுகுவது அதன் மதிப்பை ஒரு சரமாகத் தருகிறது.
get_all('header-name')
பலமுறை தோன்றக்கூடிய தலைப்புகளுக்கு (Received
போன்றவை) பயனுள்ளதாக இருக்கும்.- தொகுப்பு தலைப்பு டிகோடிங்கை கையாளுகிறது, எனவே
Subject: =?utf-8?Q?Global_Characters:_=E3=81=93=E3=82=93=E3=81=AB=E3=81=A1=E3=81=AF?=
போன்ற மதிப்புகள் தானாகவே படிக்கக்கூடிய சரங்களாக மாற்றப்படுகின்றன.
உடல் உள்ளடக்கத்தைப் பிரித்தெடுத்தல்
உண்மையான செய்தி உடலைப் பிரித்தெடுக்க, செய்தி மல்டிபார்ட்டாக உள்ளதா என்பதைச் சரிபார்க்க வேண்டும். மல்டிபார்ட் செய்திகளுக்கு, நீங்கள் அதன் பகுதிகள் வழியாக மீண்டும் மீண்டும் செல்கிறீர்கள்.
from email.message import EmailMessage
from email import message_from_string
multipart_email_raw = """
From: multi@example.com
To: user@example.com
Subject: Test Multipart Email
Content-Type: multipart/alternative; boundary="_----------=_12345"
--_----------=_12345
Content-Type: text/plain; charset="utf-8"
Hello from the plain text part!
--_----------=_12345
Content-Type: text/html; charset="utf-8"
<html>
<body>
<h1>Hello from the HTML part!</h1>
<p>This is a <strong>rich text</strong> email.</p>
</body>
</html>
--_----------=_12345--
"""
msg = message_from_string(multipart_email_raw)
if msg.is_multipart():
print("\n--- Multipart Email Body ---")
for part in msg.iter_parts():
content_type = part.get_content_type()
charset = part.get_content_charset() or 'utf-8' # Default to utf-8 if not specified
payload = part.get_payload(decode=True) # Decode payload bytes
try:
decoded_content = payload.decode(charset)
print(f"Content-Type: {content_type}, Charset: {charset}\nContent:\n{decoded_content}\n")
except UnicodeDecodeError:
print(f"Content-Type: {content_type}, Charset: {charset}\nContent: (Binary or undecodable data)\n")
# Handle binary data, or attempt a fallback encoding
else:
print("\n--- Single Part Email Body ---")
charset = msg.get_content_charset() or 'utf-8'
payload = msg.get_payload(decode=True)
try:
decoded_content = payload.decode(charset)
print(f"Content-Type: {msg.get_content_type()}, Charset: {charset}\nContent:\n{decoded_content}\n")
except UnicodeDecodeError:
print(f"Content: (Binary or undecodable data)\n")
விளக்கம்:
is_multipart()
மின்னஞ்சலில் பல பகுதிகள் உள்ளதா என்பதை தீர்மானிக்கிறது.iter_parts()
ஒரு மல்டிபார்ட் செய்தியின் அனைத்து துணைப் பகுதிகளையும் மீண்டும் மீண்டும் செய்கிறது.get_content_type()
முழுமையான MIME வகையைத் தருகிறது (எ.கா.,text/plain
).get_content_charset()
Content-Type
தலைப்பிலிருந்து எழுத்துத் தொகுப்பைப் பிரித்தெடுக்கிறது.get_payload(decode=True)
முக்கியமானது: இது *டிகோட் செய்யப்பட்ட* உள்ளடக்கத்தை பைட்டுகளாகத் தருகிறது. பின்னர் நீங்கள் ஒரு பைத்தான் சரத்தைப் பெற இந்த பைட்டுகளை சரியான எழுத்துத் தொகுப்பைப் பயன்படுத்தி.decode()
செய்ய வேண்டும்.
பிரித்தெடுக்கும்போது இணைப்புகளைக் கையாளுதல்
இணைப்புகளும் ஒரு மல்டிபார்ட் செய்தியின் பகுதிகளாகும். அவற்றின் Content-Disposition
தலைப்பைப் பயன்படுத்தி அவற்றை அடையாளம் கண்டு, அவற்றின் டிகோட் செய்யப்பட்ட பேலோடை சேமிக்கலாம்.
from email.message import EmailMessage
from email import message_from_string
import os
# Example email with a simple attachment
email_with_attachment = """
From: attach@example.com
To: user@example.com
Subject: Document Attached
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="_----------=_XYZ"
--_----------=_XYZ
Content-Type: text/plain; charset="utf-8"
Here is your requested document.
--_----------=_XYZ
Content-Type: application/pdf
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="document.pdf"
JVBERi0xLjQKMSAwIG9iagpbL1BERi9UZXh0L0ltYWdlQy9JbWFnZUkvSW1hZ0VCXQplbmRvYmoK
--_----------=_XYZ--
"""
msg = message_from_string(email_with_attachment)
output_dir = 'parsed_attachments'
os.makedirs(output_dir, exist_ok=True)
print("\n--- Processing Attachments ---")
for part in msg.iter_attachments():
filename = part.get_filename()
if filename:
filepath = os.path.join(output_dir, filename)
try:
with open(filepath, 'wb') as f:
f.write(part.get_payload(decode=True))
print(f"Saved attachment: {filepath} (Type: {part.get_content_type()})")
except Exception as e:
print(f"Error saving {filename}: {e}")
else:
print(f"Found an attachment without a filename (Content-Type: {part.get_content_type()})")
# Clean up the output directory
# import shutil
# shutil.rmtree(output_dir)
விளக்கம்:
iter_attachments()
குறிப்பாக இணைப்புகளாக இருக்கக்கூடிய பகுதிகளை (அதாவது, cóContent-Disposition: attachment
தலைப்பைக் கொண்டவை அல்லது வேறுவிதமாக வகைப்படுத்தப்படாதவை) வழங்குகிறது.get_filename()
Content-Disposition
தலைப்பிலிருந்து கோப்புப் பெயரைப் பிரித்தெடுக்கிறது.part.get_payload(decode=True)
இணைப்பின் மூல பைனரி உள்ளடக்கத்தை மீட்டெடுக்கிறது, இது ஏற்கனவேbase64
அல்லதுquoted-printable
இலிருந்து டிகோட் செய்யப்பட்டுள்ளது.
குறியாக்கங்களையும் எழுத்துத் தொகுப்புகளையும் டிகோட் செய்தல்
email
தொகுப்பு, நீங்கள் get_payload(decode=True)
ஐ அழைக்கும்போது பொதுவான பரிமாற்ற குறியாக்கங்களை (base64
, quoted-printable
போன்றவை) தானாக டிகோட் செய்வதில் ஒரு சிறந்த வேலையைச் செய்கிறது. உரை உள்ளடக்கத்தைப் பொறுத்தவரை, அது Content-Type
தலைப்பில் குறிப்பிடப்பட்டுள்ள charset
ஐப் பயன்படுத்த முயற்சிக்கிறது. எழுத்துத் தொகுப்பு குறிப்பிடப்படாவிட்டால் அல்லது அது செல்லுபடியாகாததாக இருந்தால், நீங்கள் அதை மென்மையாக கையாள வேண்டியிருக்கலாம்.
from email.message import EmailMessage
from email import message_from_string
# Example with a potentially problematic charset
email_latin1 = """
From: legacy@example.com
To: new_system@example.com
Subject: Special characters: àéíóú
Content-Type: text/plain; charset="iso-8859-1"
This message contains Latin-1 characters: àéíóú
"""
msg = message_from_string(email_latin1)
if msg.is_multipart():
for part in msg.iter_parts():
payload = part.get_payload(decode=True)
charset = part.get_content_charset() or 'utf-8'
try:
print(f"Decoded (Charset: {charset}): {payload.decode(charset)}")
except UnicodeDecodeError:
print(f"Failed to decode with {charset}. Trying fallback...")
# Fallback to a common charset or 'latin-1' if expecting it
print(f"Decoded (Fallback Latin-1): {payload.decode('latin-1', errors='replace')}")
else:
payload = msg.get_payload(decode=True)
charset = msg.get_content_charset() or 'utf-8'
try:
print(f"Decoded (Charset: {charset}): {payload.decode(charset)}")
except UnicodeDecodeError:
print(f"Failed to decode with {charset}. Trying fallback...")
print(f"Decoded (Fallback Latin-1): {payload.decode('latin-1', errors='replace')}")
விளக்கம்:
- எப்போதும்
Content-Type
தலைப்பில் குறிப்பிடப்பட்டுள்ள எழுத்துத் தொகுப்பைப் பயன்படுத்த முயற்சிக்கவும். - பல்வேறு மற்றும் தரமற்ற மூலங்களிலிருந்து வரும் மின்னஞ்சல்களைக் கையாளும்போது, குறிப்பாக வலிமைக்காக
try-except UnicodeDecodeError
தொகுதியைப் பயன்படுத்தவும். errors='replace'
அல்லதுerrors='ignore'
என்பதை.decode()
உடன் பயன்படுத்தி, இலக்கு குறியாக்கத்திற்கு மாற்ற முடியாத எழுத்துக்களைக் கையாளலாம், இது செயலிழப்புகளைத் தடுக்கிறது.
மேம்பட்ட பிரித்தெடுத்தல் காட்சிகள்
நிஜ உலக மின்னஞ்சல்கள், உள்ளடுக்கு மல்டிபார்ட் கட்டமைப்புகளுடன் மிகவும் சிக்கலானதாக இருக்கலாம். email
தொகுப்பின் மறுசுழற்சி தன்மை இவற்றை நேராக வழிநடத்துவதை எளிதாக்குகிறது. ஆழமாக உள்ளடுக்கிய செய்திகளைப் பயணிக்க is_multipart()
மற்றும் iter_parts()
ஐ இணைக்கலாம்.
from email.message import EmailMessage
from email import message_from_string
def parse_email_part(part, indent=0):
prefix = " " * indent
content_type = part.get_content_type()
charset = part.get_content_charset() or 'N/A'
print(f"{prefix}Part Type: {content_type}, Charset: {charset}")
if part.is_multipart():
for subpart in part.iter_parts():
parse_email_part(subpart, indent + 1)
elif part.get_filename(): # It's an attachment
print(f"{prefix} Attachment: {part.get_filename()} (Size: {len(part.get_payload(decode=True))} bytes)")
else: # It's a regular text/html body part
payload = part.get_payload(decode=True)
try:
decoded_content = payload.decode(charset)
# print(f"{prefix} Content (first 100 chars): {decoded_content[:100]}...") # For brevity
except UnicodeDecodeError:
print(f"{prefix} Content: (Binary or undecodable text)")
complex_email_raw = """
From: complex@example.com
To: receiver@example.com
Subject: Complex Email with HTML, Plain, and Attachment
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="outer_boundary"
--outer_boundary
Content-Type: multipart/alternative; boundary="inner_boundary"
--inner_boundary
Content-Type: text/plain; charset="utf-8"
Plain text content.
--inner_boundary
Content-Type: text/html; charset="utf-8"
<html><body><h2>HTML Content</h2></body></html>
--inner_boundary--
--outer_boundary
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="data.bin"
SGVsbG8gV29ybGQh
--outer_boundary--
"""
msg = message_from_string(complex_email_raw)
print("\n--- Traversing Complex Email Structure ---")
parse_email_part(msg)
விளக்கம்:
- மறுசுழற்சி செயல்பாடு
parse_email_part
முழு செய்தி மரத்தின் வழியாக எப்படி நடப்பது என்பதைக் காட்டுகிறது, ஒவ்வொரு மட்டத்திலும் மல்டிபார்ட் பகுதிகள், இணைப்புகள் மற்றும் உடல் உள்ளடக்கத்தை அடையாளம் காண்கிறது. - இந்த முறை ஆழமாக உள்ளடுக்கிய மின்னஞ்சல்களிலிருந்து குறிப்பிட்ட வகை உள்ளடக்கத்தைப் பிரித்தெடுக்க மிகவும் நெகிழ்வானது.
உருவாக்கம் vs. பிரித்தெடுத்தல்: ஒரு ஒப்பீட்டுப் பார்வை
தனித்தனி செயல்பாடுகளாக இருந்தாலும், உருவாக்கம் மற்றும் பிரித்தெடுத்தல் ஆகியவை ஒரே நாணயத்தின் இரு பக்கங்கள்: MIME செய்தி கையாளுதல். ஒன்றைப் புரிந்துகொள்வது தவிர்க்க முடியாமல் மற்றொன்றுக்கு உதவுகிறது.
உருவாக்கம் (அனுப்புதல்):
- கவனம்: தலைப்புகள், உள்ளடக்கம் மற்றும் இணைப்புகளை ஒரு தரநிலை-இணக்கமான MIME கட்டமைப்பில் சரியாக ஒன்று சேர்ப்பது.
- முதன்மை கருவி:
email.message.EmailMessage
உடன்set_content()
,add_attachment()
,add_alternative()
,add_related()
போன்ற முறைகள். - முக்கிய சவால்கள்: சரியான MIME வகைகள், எழுத்துத் தொகுப்புகள் (குறிப்பாக உலகளாவிய ஆதரவுக்கு UTF-8), `Content-Transfer-Encoding`, மற்றும் சரியான தலைப்பு வடிவமைப்பு ஆகியவற்றை உறுதி செய்தல். தவறான நடவடிக்கைகள் மின்னஞ்சல்கள் சரியாகக் காட்டப்படாமல் போகலாம், இணைப்புகள் சிதைவடையலாம் அல்லது செய்திகள் ஸ்பேம் எனக் குறிக்கப்படலாம்.
பிரித்தெடுத்தல் (பெறுதல்):
- கவனம்: ஒரு மூல மின்னஞ்சல் பைட் ஸ்ட்ரீமை அதன் கூறுகள், குறிப்பிட்ட தலைப்புகள், உடல் உள்ளடக்கம் மற்றும் இணைப்புகளாகப் பிரிப்பது.
- முதன்மை கருவி:
email.parser.BytesParser
அல்லதுemail.message_from_bytes()
, பின்னர் விளைந்தEmailMessage
பொருளைis_multipart()
,iter_parts()
,get_payload()
,get_filename()
மற்றும் தலைப்பு அணுகல் போன்ற முறைகளுடன் வழிநடத்துதல். - முக்கிய சவால்கள்: சிதைந்த மின்னஞ்சல்களைக் கையாளுதல், எழுத்துக்குறியாக்கங்களைச் சரியாக அடையாளம் காணுதல் (குறிப்பாக தெளிவற்றதாக இருக்கும்போது), விடுபட்ட தலைப்புகளைக் கையாளுதல் மற்றும் பல்வேறு MIME கட்டமைப்புகளிலிருந்து தரவை வலுவாகப் பிரித்தெடுத்தல்.
நீங்கள் `EmailMessage` ஐப் பயன்படுத்தி உருவாக்கும் ஒரு செய்தி `BytesParser` ஆல் சரியாகப் பிரிக்கக்கூடியதாக இருக்க வேண்டும். இதேபோல், பிரித்தெடுக்கும்போது உருவாக்கப்பட்ட MIME கட்டமைப்பைப் புரிந்துகொள்வது, சிக்கலான செய்திகளை நீங்களே எவ்வாறு உருவாக்குவது என்பது குறித்த நுண்ணறிவை உங்களுக்கு வழங்குகிறது.
பைத்தானுடன் உலகளாவிய மின்னஞ்சல் கையாளுதலுக்கான சிறந்த நடைமுறைகள்
உலகளாவிய பார்வையாளர்களுடன் தொடர்பு கொள்ளும் அல்லது பல்வேறு மின்னஞ்சல் மூலங்களைக் கையாளும் பயன்பாடுகளுக்கு, இந்த சிறந்த நடைமுறைகளைக் கவனியுங்கள்:
- UTF-8 இல் தரப்படுத்துங்கள்: உருவாக்கும்போதும், பிரித்தெடுக்கும்போதும் எதிர்பார்க்கும்போதும் அனைத்து உரை உள்ளடக்கத்திற்கும் எப்போதும் UTF-8 ஐப் பயன்படுத்தவும். இது எழுத்துக்குறியாக்கத்திற்கான உலகளாவிய தரமாகும் மற்றும் mojibake (சிதைந்த உரை) ஐத் தவிர்க்கிறது.
- மின்னஞ்சல் முகவரிகளைச் சரிபார்க்கவும்: அனுப்புவதற்கு முன், டெலிவரி செய்வதை உறுதிசெய்ய பெறுநரின் மின்னஞ்சல் முகவரிகளைச் சரிபார்க்கவும். பிரித்தெடுக்கும்போது, `From`, `To`, அல்லது `Cc` தலைப்புகளில் செல்லுபடியாகாத அல்லது சிதைந்த முகவரிகளுக்குத் தயாராக இருங்கள்.
- கடுமையாகச் சோதிக்கவும்: HTML மற்றும் இணைப்புகளின் சீரான ரெண்டரிங்கை உறுதிசெய்ய உங்கள் மின்னஞ்சல் உருவாக்கத்தை பல்வேறு மின்னஞ்சல் கிளையண்ட்கள் (Gmail, Outlook, Apple Mail, Thunderbird) மற்றும் தளங்களில் சோதிக்கவும். பிரித்தெடுப்பதற்கு, அசாதாரண குறியாக்கங்கள், விடுபட்ட தலைப்புகள் அல்லது சிக்கலான உள்ளடுக்கு கட்டமைப்புகள் கொண்ட பல்வேறு மாதிரி மின்னஞ்சல்களுடன் சோதிக்கவும்.
- பிரித்தெடுக்கப்பட்ட உள்ளீட்டைத் தூய்மைப்படுத்தவும்: உள்வரும் மின்னஞ்சல்களிலிருந்து பிரித்தெடுக்கப்பட்ட உள்ளடக்கத்தை எப்போதும் நம்பத்தகாததாகக் கருதுங்கள். அதை ஒரு வலை பயன்பாட்டில் காண்பித்தால் XSS தாக்குதல்களைத் தடுக்க HTML உள்ளடக்கத்தைத் தூய்மைப்படுத்தவும். கோப்புகளைச் சேமிக்கும்போது பாதை கடத்தல் அல்லது பிற பாதுகாப்பு பாதிப்புகளைத் தடுக்க இணைப்பு கோப்புப் பெயர்கள் மற்றும் வகைகளைச் சரிபார்க்கவும்.
- வலுவான பிழை கையாளுதல்: பேலோடுகளை டிகோட் செய்யும்போது அல்லது காணாமல் போகக்கூடிய தலைப்புகளை அணுகும்போது விரிவான
try-except
தொகுதிகளைச் செயல்படுத்தவும்.UnicodeDecodeError
அல்லதுKeyError
ஐ மென்மையாகக் கையாளவும். - பெரிய இணைப்புகளைக் கையாளவும்: உருவாக்கும்போதும் (அஞ்சல் சேவையக வரம்புகளை மீறுவதைத் தவிர்க்க) மற்றும் பிரித்தெடுக்கும்போதும் (அதிகப்படியான நினைவகப் பயன்பாடு அல்லது வட்டு இட நுகர்வைத் தடுக்க) இணைப்பு அளவுகளில் கவனமாக இருங்கள். உங்கள் கணினி ஆதரித்தால் பெரிய இணைப்புகளை ஸ்ட்ரீம் செய்வதைக் கருத்தில் கொள்ளுங்கள்.
email.policy
ஐப் பயன்படுத்தவும்: முக்கியமான பயன்பாடுகளுக்கு, மின்னஞ்சல் தரங்களுடன் கடுமையான இணக்கத்தை உறுதிசெய்ய ஒரு `email.policy` ஐ (எ.கா., `policy.SMTP`) வெளிப்படையாகத் தேர்வுசெய்யவும், இது டெலிவரி மற்றும் இயங்குதிறனைப் பாதிக்கலாம்.- மெட்டாடேட்டா பாதுகாத்தல்: பிரித்தெடுக்கும்போது, என்ன மெட்டாடேட்டா (தலைப்புகள், அசல் எல்லை சரங்கள்) பாதுகாக்கப்பட வேண்டும் என்பதைத் தீர்மானிக்கவும், குறிப்பாக நீங்கள் ஒரு அஞ்சல் காப்பகம் அல்லது பகிர்தல் அமைப்பை உருவாக்குகிறீர்கள் என்றால்.
முடிவுரை
பைத்தானின் email
தொகுப்பு என்பது நிரல் ரீதியாக மின்னஞ்சலுடன் தொடர்பு கொள்ள வேண்டிய எவருக்கும் நம்பமுடியாத அளவிற்கு சக்திவாய்ந்த மற்றும் நெகிழ்வான ஒரு நூலகமாகும். MIME செய்திகளை உருவாக்குதல் மற்றும் உள்வரும் மின்னஞ்சல்களை வலுவாகப் பிரித்தெடுத்தல் இரண்டிலும் தேர்ச்சி பெறுவதன் மூலம், அதிநவீன மின்னஞ்சல் ஆட்டோமேஷன் அமைப்புகளை உருவாக்குதல், மின்னஞ்சல் கிளையண்ட்களை உருவாக்குதல், மின்னஞ்சல் தரவை பகுப்பாய்வு செய்தல் மற்றும் கிட்டத்தட்ட எந்தவொரு பயன்பாட்டிலும் மின்னஞ்சல் செயல்பாடுகளை ஒருங்கிணைக்கும் திறனை நீங்கள் திறக்கிறீர்கள்.
இந்த தொகுப்பு MIME-இன் அடிப்படைக் சிக்கல்களை சிந்தனையுடன் கையாளுகிறது, இது டெவலப்பர்கள் தங்கள் மின்னஞ்சல் தொடர்புகளின் உள்ளடக்கம் மற்றும் தர்க்கத்தில் கவனம் செலுத்த அனுமதிக்கிறது. நீங்கள் உலகளாவிய பார்வையாளர்களுக்கு தனிப்பயனாக்கப்பட்ட செய்திமடல்களை அனுப்புகிறீர்களா அல்லது தானியங்கு கணினி அறிக்கைகளிலிருந்து முக்கியமான தரவைப் பிரித்தெடுக்கிறீர்களா என்பதைப் பொருட்படுத்தாமல், email
தொகுப்பைப் பற்றிய ஆழமான புரிதல் நம்பகமான, இயங்கக்கூடிய மற்றும் உலகளவில் அறிந்த மின்னஞ்சல் தீர்வுகளை உருவாக்குவதில் விலைமதிப்பற்றதாக நிரூபிக்கும்.